package com.pdh.dao;

import com.pdh.bean.User;
import com.pdh.exception.DuplicatePhoneException;
import com.pdh.exception.UnHandleException;

import java.util.List;
import java.util.Map;

/**
 * @Author: 彭德华
 * @Date 2021-08-29 22:19
 */
public interface BaseUserDao {
    /**
     * 于查询数据库中的用户信息(用户数量，日注册量)
     * @return [{size:总数,day:新增}]
     */
    Map<String,Integer> consoleUser() throws UnHandleException;

    /**
     * 用于查询所有的用户
     * @param paging 是否分页标记 true/false 分页/查询所有
     * @param offset sql语句起始索引
     * @param limit 页查询的数量
     * @return 用户的集合
     */
    List<User> findAll(boolean paging, int offset, int limit) throws UnHandleException;

    /**
     * 根据用户手机号查询用户信息
     * @param userPhone 用户手机号
     * @return 查询的用户信息列表，电话不存在时候放回null
     */
    User findByUserPhone(String userPhone) throws UnHandleException;

    /**
     * 用户的增加
     * @param user 录入用户的对象
     * @return
     */
    boolean insert(User user) throws DuplicatePhoneException, UnHandleException;

    /**
     * 用户的修改
     * @param id 要修改的编号
     * @param newUser 新的用户对象
     * @return 修改的结果
     */
    boolean update(int id,User newUser) throws DuplicatePhoneException, UnHandleException;

    /**
     * 根据id删除单个用户 为什么不用userPhone进行删除，因为可能一个号码对应多个用户，就删除了多个用户
     * @param id 要删除的用户id
     * @return 删除的结果
     */
    boolean delete(int id) throws UnHandleException;

    /**
     * 用户登陆语句
     * @param userPhone
     * @return
     */
    boolean login(String userPhone) throws UnHandleException;

    /**
     * 更新用户登陆信息
     * @param userPhone
     * @param ip
     * @return
     */
    boolean updateLoginInformation(String userPhone, boolean isCourier,String ip) throws UnHandleException;

    /**
     * 退出登陆，修改状态码
     * @param id
     * @return
     */
    boolean logout(int id) throws UnHandleException;

}
